home *** CD-ROM | disk | FTP | other *** search
- /*
- File: GetEAddr.c
- Rich Kubota
- DTS
- June 2, 1992
-
- Sample program to demonstrate the use of the LAP Manager to determine the
- current AppleTalk connection device based on the ADEV resource ID. Also
- demonstrates a call to EGetInfo to obtain the burned in Ethernet address
- whether on the card or built-in on the Quadra's. This program assumes the
- use of the Apple Ethernet phase 1 0r 2 driver ADEV's.
-
- */
-
- #include <Types.h>
- #include <QuickDraw.h>
- #include <Fonts.h>
- #include <Events.h>
- #include <Dialogs.h>
- #include <Resources.h>
- #include <OSUtils.h>
- #include <Files.h>
- #include <ENET.h>
- #include <Devices.h>
- #include <Memory.h>
- #include <Menus.h>
- #include <OSEvents.h>
- #include <AppleTalk.h>
-
-
- #define LGetATalkInfo 0x09 /* Get AppleTalk info */
- #define kSPConfig 0x1FB /* low nibble of global byte indicates whether AppleTalk active */
-
- #define kAlertID 1000
- #define ETalkPh1 2 /* Ethernet Phase 1 ADEV resource ID */
- #define ETalkPh2 10 /* Ethernet Phase 2 ADEV resource ID */
-
- #define kAlertID 1000
- #define kAddrID 1001
-
- Boolean SlotMgrAvailable();
- void doInitializing();
- pascal long CallLAPMgr( short selector); /* prototype for assembler routine */
-
- main()
- {
-
- EParamBlock pb;
- OSErr err;
- long result;
- char adevType;
- char slot;
- char buffer[78], c1, c2;
- Str32 enetAddrStr;
- short i;
- Ptr spConfigPtr;
-
-
-
- doInitializing(); /* set up to display alert dialogs */
- result = CallLAPMgr(LGetATalkInfo); /* get current connection setting */
- adevType = result & 0x000000FF; /* atlk resource id is return in LSB */
- slot = result>>24; /* card slot returned in MSB */
-
- spConfigPtr = (Ptr)kSPConfig;
- if ((*spConfigPtr & 0x0F) != 1) /* Check whether AppleTalk is enabled */
- {
- ParamText("\pAppleTalk must be active.\
- Go to the Chooser and turn AppleTalk on.", nil, nil, nil);
- err = StopAlert(kAlertID, nil);
- ExitToShell();
- }
- if ((adevType != ETalkPh1) && (adevType != ETalkPh2))
- /* check whether Ethernet is the current setting */
- {
- ParamText("\pEthernet is not the default connection. Use the Network CDEV and select the Ethernet driver.", nil, nil, nil);
- err = StopAlert(kAlertID, nil);
- ExitToShell();
- }
-
- /* now we know that AppleTalk is active and that EtherTalk is already open */
- if ((err = OpenDriver("\p.ENET", &pb.EParms1.ioRefNum)) == noErr)
- {
- pb.EParms1.ePointer = buffer;
- pb.EParms1.eBuffSize = sizeof(buffer);
- err = EGetInfo(&pb, false);
- enetAddrStr[0] = 12;
- /* set up the address string to display in hexidecimal */
- for (i=0; i<6; i++)
- {
- c1 = ((buffer[i] >> 4) & 0x0F) + '0';
- c2 = (buffer[i] & 0x0F) + '0';
- if (c1 > '9')
- c1 = c1 + ('A' - '9' - 1);
- if (c2 > '9')
- c2 = c2 + ('A' - '9' - 1);
- enetAddrStr[2*i+1] = c1;
- enetAddrStr[2*i+2] = c2;
- }
- /* display the address in an alert dialog */
- ParamText(enetAddrStr, nil, nil, nil);
- err = Alert(kAddrID, nil);
- }
- else
- {
- ParamText("\pError opening the Ethernet driver.", nil, nil, nil);
- err = StopAlert(kAlertID, nil);
- ExitToShell();
- }
- }
-
-
- /*
- * doInitializing() Called at application boot to allocate master pointers,
- * check SysEnvirons() for Mac type, check for WaitNextEvent implementation.
- * and call all other initializing routines.
- */
- void doInitializing()
- {
- MaxApplZone();
-
- MoreMasters();
- MoreMasters();
- MoreMasters();
- MoreMasters();
- #ifdef THINK_C
- InitGraf(&thePort);
- #else
- InitGraf(&qd.thePort);
- #endif
-
- InitFonts();
- FlushEvents(everyEvent, 0);
- InitWindows();
- InitMenus();
- TEInit();
- InitDialogs(0L);
- InitCursor();
- }
-